package com.redis.springbootredis.rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @author
 * @create 2020-11-03 19:46
 * 第一个生产者
 */
public class FirstProducer {

    public static void main(String[] args) throws Exception {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置访问的ip地址
        connectionFactory.setHost("192.168.238.132");
        //设置虚拟主机(类似于redis的db)
        connectionFactory.setVirtualHost("ljw");
        //设置密码和账户
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        //新建连接对象
        Connection connection = connectionFactory.newConnection();
        //创建连接信道(需要通信的话必须创建，类似于输送水的水管)
        Channel channel = connection.createChannel();
        //定义队列
        /*
         String queue  定义队列的名称
         boolean durable 队列是否持久化，即重启rabbitMq后是否保存队列
         boolean exclusive 是否为独占队列，一般为false，因为别的连接无法使用，除非自己生产自己消费可用
         boolean autoDelete  队列使用完后是否删除，一般也是false
         Map<String, Object> arguments  创建队列时附带的其他参数
        */
        channel.queueDeclare("simpleQueue",true,
                false,false,null);
        //创建生产者
        /*
          String exchange  交换机的名字，最简单的模型不需要指定交换机，使用系统默认的即可(但是不能写null)
          String routingKey 路由ID，最简单的模型路由ID就是队列名
          BasicProperties props  附加的消息属性
          byte[] body 消息体，发送的消息内容
        */
        channel.basicPublish("","simpleQueue",null,"hello RabbitMQ".getBytes());
        System.out.println("生产成功");
        //生产者发送消息后需要释放资源
        channel.close();  //关闭信道
        connection.close(); //关闭连接
    }
}
